import time
import asyncio
from crewai.flow.flow import Flow, start, listen, or_, and_

class OrAndFlow(Flow):

    @start()
    def start_node(self):
        self.state["start"] = "你好，这是开始节点"

    @listen(start_node)
    def step_one(self):
        self.state["step_one"] = "这是第一个节点"

    # 与节点，两个节点执行完后进入该节点
    @listen(and_(start_node, step_one))
    def and_node(self):
        self.state["and"] = "这是并且节点"


    # 或节点, 两个节点的任意一个节点执行完就可以进入该节点, 2个节点走完后都会执行, 并非其中一个节点执行完另一个节点就不走了
    @listen(or_(start_node, step_one))
    def or_node(self):
        print("或节点")
        self.state["or"] = "这是或节点"


    @listen(or_node)
    def node(self):
        print("或节点后续")
        self.state["node"] = "这是最终节点"


flow = OrAndFlow()
flow.plot("or_and_flow.png")
flow.kickoff()
print("流程最终输出:", flow.state)

